#pragma once
#include "cem/config_directory.h"
#include "cem/diagnostics.h"

#include <string>

// 前向声明，避免在头文件中强依赖 cJSON 头
struct cJSON;

namespace cem
{

// 函数: build_config_directory_from_cjson
// 作用: 从 cJSON 根节点构建不可变的 ConfigDirectory 目录树。
// 参数:
//   - root: cJSON 根节点，必须为对象；若不是对象，将返回空的目录（且在 diags 中记录错误）。
//   - diags: 可选诊断收集器。
// 返回: 构建完成的 ConfigDirectory（不会返回空指针）。
ConfigDirectory build_config_directory_from_cjson(const cJSON * root, DiagnosticList * diags = nullptr);

// 函数: build_config_directory_from_json_text
// 作用: 从 JSON 文本解析并构建 ConfigDirectory。
// 参数:
//   - json_text: JSON 文本
//   - diags: 可选的诊断输出指针，若解析失败会追加错误信息
// 返回: 构建好的目录；解析失败时返回空目录（名称为"$")。
ConfigDirectory build_config_directory_from_json_text(const std::string & json_text, DiagnosticList * diags = nullptr);

} // namespace cem